


ssize_t rio_readn(int fd,void *usrbuf,size_t n)
{
     size_t nleft=n;
     ssize_t nread;
     char *bufp=usrbuf;

    while(nleft>0)
    {
       if((nread=read(fd,bufp,nleft))<0)
        {
          if(errno==EINTR)
            nread=0;
          else
            return -1;
        }
       else if(nread==0)
          break;
       nleft-=nread;
       bufp+=nread;
    }
    return (n-nleft);
}

